home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #6 / Amiga Plus CD - 2004 - No. 06.iso / AmiSoft / Util / libs / ExtraLib.lha / Extra / include / rhosigma / extra.bc < prev    next >
Text File  |  2004-05-30  |  20KB  |  443 lines

  1. ' ___________________________________________________________________________
  2. ' |*************************************************************************|
  3. ' |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  4. ' |*| Set TAB to 4 for best readable file layout.  |*|  Maxon Basic 3.00  |*|
  5. ' |*|______________________________________________|*|____________________|*|
  6. ' |*************************************************************************|
  7. ' |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  8. ' |*|               |*|  $Id: extra.bc (30.05.04)                         |*|
  9. ' |*| ###### ###### |*|  RhoSigma Source based on NDK 3.1 Includes 40.15  |*|
  10. ' |*| ##  ## ##   # |*| _________________________________________________ |*|
  11. ' |*| ##  ##  ##    |*|                                                   |*|
  12. ' |*| ######   ##   |*|  The public BASIC definitions for extra.library   |*|
  13. ' |*| ##      ##    |*|                                                   |*|
  14. ' |*| ##     ##   # |*| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |*|
  15. ' |*| ##     ###### |*|  Copyright © 1998-2004 RhoSigma, Roland Heyder    |*|
  16. ' |*|               |*|  All Rights Reserved.                             |*|
  17. ' |*|_______________|*|___________________________________________________|*|
  18. ' |*************************************************************************|
  19. ' ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  20.  
  21. '$UNDERLINES
  22.  
  23. '---------- die BufInfoBlock-Struktur von »BufInfo()« -----------------------
  24.  
  25. CONST bib_OwnerID%        = 0   '(APTR)  Task (TCB), der diesen Puffer öffnete
  26. CONST bib_MaxSize%        = 4   '(ULONG) momentane Größe des Datenbereichs in Byte
  27. CONST bib_FreeSize%        = 8   '(ULONG) davon momentan noch unbenutzt
  28. CONST bib_DataStart%    = 12  '(APTR)  Adresse des gegenwärtigen Datenbereichs
  29. CONST bib_CurPos%        = 16  '(ULONG) aktuelle Cursorposition (Zählbeginn=0 !!)
  30. CONST bib_EndPos%        = 20  '(ULONG) aktuelle Anfügeposition
  31. CONST bib_LastFind%        = 24  '(APTR)  Zeiger auf zuletzt gesuchte Daten od. 0-PTR
  32. CONST bib_FindSize%        = 28  '(ULONG) die Länge obiger Such-Daten oder null
  33. CONST bib_KeyNum%        = 32  '(ULONG) der Schlüssel der o.g. Such-Daten oder -1
  34. '------------------------------------- neu ab v2.062
  35. CONST bib_DataMemType%    = 36  '(ULONG) Speicherflags (MEMF_...) des Datenbereichs
  36. '---------------------------------------------------
  37. CONST bib_SizeOf%        = 40
  38.  
  39. '---------- Modes für »SeekBuf()« -------------------------------------------
  40.  
  41. CONST SKM_Current%    = 0        'Positionierung relativ zur gegenwärtigen CurPos
  42. CONST SKM_Start%    = 1        'Positionierung relativ zum Pufferanfang
  43. CONST SKM_End%        = 2        'Positionierung relativ zum Pufferende
  44. CONST SKM_Bookmark%    = 3        '»Position« = Nummer der gewünschten Bookmark
  45.  
  46. '---------- die Parameter-Struktur für »UnpackByteRun1()« -------------------
  47.  
  48. CONST up_InBuf%        = 0        '(APTR)  Zeiger auf die gepackten Daten
  49. CONST up_InLen%        = 4        '(ULONG) die Größe des gepackten Bereichs in Byte
  50. CONST up_Private%    = 8        '(ULONG) beim ersten Aufruf unbedingt auf 0 setzen
  51. CONST up_SizeOf%    = 12
  52.  
  53. '---------- Styles, Masken u. Flags für »SpecTextPrefs()« -------------------
  54.  
  55. '** Styles **
  56. CONST STS_Plain%     = 0    'normaler Text          \
  57. CONST STS_Underline% = 1    'unterstrichener Text |  können durch Addition oder
  58. CONST STS_Bold%         = 2    'fettgedruckter Text  |  log. ODER kombiniert werden
  59. CONST STS_Italic%     = 4    'kursiver Text          /
  60.  
  61. '** Masken **
  62. CONST STM_Normal%    = &H0    'keine Umrandung, d.h. normale Textausgabe
  63. CONST STM_Outline%    = &Hff    'volle Umrandung
  64. CONST STM_Shadow%    = &H1c    'Schatten unten/rechts sichtbar
  65. CONST STM_Ghost%    = &Hc1    'dies wirkt am besten, wenn Sie als »MPen«
  66.                             'die selbe Farbe verwenden, wie der Hinter-
  67.                             'grund hat
  68.  
  69. '** Flags **
  70. CONST STF_FJAM2&    = 1     'Normalerweise benutzt »SpecText()« den DrawMode JAM1,
  71.                          'mit diesem Flag wird jedoch JAM2 erzwungen.
  72. CONST STF_AP2MP&    = 2     'immer der gerade eingestellte »APen« des RastPorts
  73.                          'soll als »MainPen« (MPen) verwendet werden
  74. CONST STF_BP2TL&    = 4     'immer der gerade eingestellte »BPen« des RastPorts
  75.                          'soll als »TopLeftPen« (TLPen) verwendet werden
  76. CONST STF_OP2BR&    = 8     'immer der gerade eingestellte »OPen« des RastPorts
  77.                          'soll als »BottomRightPen« (BRPen) verwendet werden
  78. CONST STF_PSWAP&    = 16 'vertauscht »TLPen« u. »BRPen«, d.h. »TLPen« wird für
  79.                          'un./re. und »BRPen« für ob./li. verwendet
  80.  
  81. ' Die folgenden Flags haben keinen Einfluß auf die Arbeitsweise der Funk-
  82. ' tion »SpecText()«. Sie dienen nur dazu, »SpecTextPrefs()« mitzuteilen,
  83. ' welche Parameter neu eingestellt werden sollen. Damit soll überflüssiges
  84. ' Register-retten verhindert werden, da Sie nicht jedem Register, welches
  85. ' von »SpecTextPrefs()« erwartet wird, zwangsläufig einen sinnvollen Wert
  86. ' zuweisen müssen. Wenn Sie z.B. mit D0-D5 irgendwelche Berechnungen machen,
  87. ' oder sie als Schleifenzähler benutzen, und wollen dann den »MPen« ver-
  88. ' ändern, dann brauchen Sie nur D0 mit diesem zu initialisieren und D5 das
  89. ' entsprechende Flag (STF_CMPEN) zuweisen, während Sie sich um D1-D4 nicht
  90. ' sorgen müssen, da diese bei jenem Aufruf vollkommen unberührt und unver-
  91. ' ändert bleiben, d.h. sie müssen weder gerettet noch initialisiert werden.
  92. '
  93. ' ACHTUNG: Wenn keines der folgenden Flags angegeben wird, dann heißt das
  94. ' ¯¯¯¯¯¯¯¯ nicht, daß KEIN Wert geändert werden soll, sondern daß ALLE Werte
  95. '          zu ändern sind !! (In diesem Falle müssen dann logischer Weise
  96. '                              auch alle Register initialisiert werden.)
  97.  
  98. CONST STF_CMPEN&    = 1024    'Nur den »MPen« auf den angegebenen Wert ändern.
  99. CONST STF_TLPEN&    = 2048    'Nur den »TLPen« auf den angegebenen Wert ändern.
  100. CONST STF_BRPEN&    = 4096    'Nur den »BRPen« auf den angegebenen Wert ändern.
  101. CONST STF_STYLE&    = 8192    'Nur den SoftStyle auf den angegebenen Wert ändern.
  102. CONST STF_CMASK&    = 16384    'Nur die Maske auf den angegebenen Wert ändern.
  103. CONST STF_FLAGS&    = 32768    'Nur die Flags auf den angegebenen Wert ändern.
  104.  
  105. ' Es können auch alle Kombinationen der obigen Flags angegeben werden. Die
  106. ' Funktion »SpecTextPrefs()« wird dann alles das, was Sie wünschen, ändern.
  107.  
  108. '---------- Fehlernummern von »LastError()« ---------------------------------
  109.  
  110. CONST NoError%        =  0    'bis jetzt ist kein Fehler aufgetreten
  111.  
  112. '** DBS-Funktionen **
  113. CONST BufInvalid%    =  10    'die angegebene Adresse war kein BufHandle
  114. CONST NotOwner%        =  11    'nur der Task, der den Puffer öffnete, darf ihn auch wieder schließen
  115. CONST NoBufMemory%    =  12    'nicht mehr genügend Speicher frei (MEMF_... s.a. bib_DataMemType%)
  116. CONST NoDOSProcess%    =  13    'die aufrufende Anwendung war kein DOS-Prozess
  117. CONST IoErrRequired%=  14    'ein DOS-Error ist aufgetreten (»IoErr()« der dos.library aufrufen)
  118. CONST SeekBadMode%    =  15    'der angegebene »SeekMode« ist unbekannt
  119. CONST SeekOffsetErr%=  16    'gewünschte »Position« unter-/überschreitet den Pufferanfang bzw. das Pufferende
  120. CONST NoFindMem%    =  17    'kein Speicher für Zwischenspeicherung der zu suchenden Daten (MEMF_PUBLIC)
  121. CONST FindTooLong%    =  18    'von CurPos bis EndPos bzw. Pufferanfang sind nur noch weniger Daten, als gesucht werden sollen
  122. CONST NoFindAvail%    =  19    'für »FindNext()/FindPrev()« ist mindestens ein »FindData()« erforderlich (gilt für jeden möglichen Schlüssel)
  123. CONST InvalidKey%    =  20    'ein angegebener Schlüssel liegt außerhalb des gültigen Bereichs (bei Find-Funktionen max. 8 (0-7) / bei Bookmarks max. 16 (0-15))
  124. CONST MarkNotSet%    =  21    'die angegebene Bookmark ist noch nicht gesetzt
  125. CONST MarkCleared%    =  22    'die Daten an der angegebenen Bookmark wurden durch »Clear()« gelöscht
  126.  
  127. '** StringToLong() **
  128. CONST ResultValid%    =  30    'alles in Ordnung (das Ergebnis ist gültig)
  129. CONST InvalidChar%    =  31    'im String wurde ein illegales Zeichen gefunden
  130. CONST Overflow%        =  32    'repräsentierte Zahl wäre größer als 32 Bit (LONG)
  131.  
  132. '** FillMem() **
  133. CONST OddAddress%    =  35    'ungerade Startadresse bei WORD- oder LONG-Modus
  134. CONST NotFilled%    =  36    'keine Füllung wegen Abrundung (Bereich zu klein, um wenigstens 1 Wert aufzunehmen)
  135.  
  136. '** ShowMsg() **
  137. CONST BadHeight%    =  40    'angegebene Höhe war größer als 200 Videozeilen
  138. CONST NoStructMem%    =  41    'kein Speicher für benötigte Gfx-Strukturen (MEMF_ANY)
  139. CONST NoChipMemory%    =  42    'nicht genügend Speicher für die BitPlanes (MEMF_CHIP)
  140. CONST SpecTextErr%    =  43    'die Funktion »SpecText()« hat einen Fehler gemeldet
  141.  
  142. '---------- die Basis-Struktur der extra.library ----------------------------
  143.  
  144. CONST xb_Copyright%    = 34    '(APTR) ein einzeiliger Copyrightvermerk(+0)
  145. CONST xb_Private%    = 38    'ab hier 54 Bytes privater Datenbereich der Library
  146. CONST xb_SizeOf%    = 92
  147.  
  148. '---------- von der extra.library erzeugte Alert's --------------------------
  149.  
  150. CONST EL_AlertD&     =    &HB5000000
  151. CONST EL_AlertR&     =    &H35000000
  152. 'Typen-Kennungen der extra.library ($B5000000=DeadEnd/$35000000=Recovery)
  153.  
  154. CONST EL_NoDfo&         =    &HB503800B
  155. 'konnte diskfont.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen
  156.  
  157. CONST EL_NoDOS&         =    &HB5038007
  158. 'konnte dos.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen
  159.  
  160. CONST EL_NoGfx&         =    &HB5038002
  161. 'konnte graphics.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen
  162.  
  163. CONST EL_NoInt&         =    &HB5038004
  164. 'konnte intuition.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen
  165.  
  166. CONST EL_NoMath&     =    &HB5038005
  167. 'konnte mathtrans.library       V33+ oder
  168. 'konnte mathieeesingbas.library V33+ oder
  169. 'konnte mathieeedoubbas.library V33+ nicht öffnen ($B5038005)
  170.  
  171. CONST EL_Trespassed& =    &HB5068035
  172. 'Task hat Library benutzt, ohne sie vorher zu öffnen
  173.  
  174. '---------- mit extra.library verwendbare SUB-Routinen ----------------------
  175.  
  176. CONST SMTPOS_C%    = -1    'Text zentrieren
  177. CONST SMTPOS_L%    = -2    'Text linksbündig
  178. CONST SMTPOS_R%    = -3    'Text rechtsbündig
  179.  
  180. '*** extra.library / SMCOLOR() ***
  181. '============================================================================
  182. ' Diese Routine erstellt einen Farbeintrag für die optional anzugebende Farb-
  183. ' tabelle für die Funktion »ShowMsg()«.
  184. '----------------------------------------------------------------------------
  185. ' Definiert:    extra.bc  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  186. '
  187. ' Schablone:    Pen%/A/N, Red%/A/N, Green%/A/N, Blue%/A/N, EndFlag%/K/S
  188. '
  189. ' Parameter:    Pen%     --> Nr. des zu ändernden Farbstiftes (3-15)
  190. '                                (0-2 sind reserviert u. werden ignoriert)
  191. '
  192. '                Red%     --> Rot-Anteil der neuen Farbe (0-15)
  193. '                Green%     --> Grün-Anteil der neuen Farbe (0-15)
  194. '                Blue%     --> Blau-Anteil der neuen Farbe (0-15)
  195. '
  196. '                EndFlag% --> - TRUE& , dann endet hier die Farbtabelle
  197. '                             - FALSE&, dann MUSS noch ein weiterer Farbeintrag
  198. '                                       (SUB-Aufruf) folgen.
  199. '
  200. ' Bemerkung:    Nach Aufruf der Routine für alle einzelnen Farbeinträge finden
  201. '                Sie die fertige Farbtabelle in der Variable »smFarb$«, welche
  202. '                Sie an »ShowMsg()« mittels »SADD(smFarb$)« übergeben müssen.
  203. '
  204. '                Ein Beispiel für die Benutzung dieser Routine finden Sie in der
  205. '                Datei »demo/ShowMsgDemo.BAS«.
  206. '
  207. '   ACHTUNG:    Sie dürfen in Ihrem Programm keine eigene Stringvariable mit
  208. '   ¯¯¯¯¯¯¯¯    dem Namen »smFarb$« verwenden, da diese unweigerlich durch
  209. '                dieses Unterprogramm überschrieben werden würde.
  210. '
  211. '                Außerdem müssen Sie die Farbtabelle immer unmittelbar vor
  212. '                dem »ShowMsg()«-Aufruf definieren, da die Variable »smFarb$«
  213. '                jedesmal wieder überschrieben wird, und daher immer nur die
  214. '                zuletzt erstellte Farbtabelle enthält.
  215. '
  216. ' Siehe auch:  »SMTEXTP()«, »SMTEXT()«, »ShowMsg()«
  217. '============================================================================
  218.  
  219. SUB SMCOLOR(Pen%,Red%,Green%,Blue%,EndFlag%) STATIC
  220. SHARED smFarb$
  221. STATIC lFlag%
  222.  
  223.     IF lFlag%<>0 THEN    ' wird eine neue Farbtabelle angefangen,
  224.         lFlag%=0        ' dann »smFarb$« erst zurücksetzen
  225.         smFarb$=""
  226.     ELSE
  227.         lFlag%=EndFlag%
  228.     END IF
  229.  
  230.     smFarb$=smFarb$+CHR$(Pen%)+MKI$(Red%*256+Green%*16+Blue%)
  231.  
  232.     IF EndFlag%=0 THEN            ' wenn kein END-Flag, dann Continue-Byte
  233.         smFarb$=smFarb$+CHR$(1)    ' setzen, ansonsten 0-Byte
  234.     ELSE
  235.         smFarb$=smFarb$+CHR$(0)
  236.     END IF
  237.  
  238. END SUB
  239.  
  240. '*** extra.library / SMTEXTP() ***
  241. '============================================================================
  242. ' Diese Routine erstellt einen Teilstring des Parameterstrings der Funktion
  243. ' »ShowMsg()« inclusive der gewünschten Einstellungen für die Textausgabe.
  244. ' Wahlweise kann der Text automatisch zentriert, oder links- bzw. rechtsbündig
  245. ' ausgerichtet werden.
  246. '----------------------------------------------------------------------------
  247. ' Definiert:    extra.bc  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  248. '
  249. ' Schablone:    xPos%/A/N, yPos%/A/N, MPen%/A/N, TLPen%/A/N, BRPen%/A/N,
  250. '                Style%/A/N, Mask%/A/N, Text$/A, EndFlag%/K/S
  251. '
  252. ' Parameter:    xPos%     --> x-Position des Textes,
  253. '                                oder einer der oben definierten SMTPOS-Werte
  254. '
  255. '                yPos%     --> y-Position des Textes,
  256. '                                Ausrichtung an der Oberkante des Fonts
  257. '
  258. '                MPen%     --> gewünschter MainPen        \
  259. '                TLPen%     --> gewünschter TopLeftPen     |
  260. '                BRPen%     --> gewünschter BottomRightPen | (s. »SpecTextPrefs()«)
  261. '                Style%     --> gewünschter SoftStyle      |
  262. '                Mask%     --> gewünschte  Randmaske      /
  263. '
  264. '                Text$     --> der Text selbst als Variable oder Konstante
  265. '
  266. '                EndFlag% --> - TRUE& , dann endet hier der Parameterstring
  267. '                             - FALSE&, dann MUSS noch ein weiterer Teilstring
  268. '                                       (SUB-Aufruf) folgen.
  269. '
  270. ' Bemerkung:    Nach Aufruf der Routine für alle einzelnen Teilstrings finden
  271. '                Sie den fertigen Parameterstring in der Variable »smAlert$«,
  272. '                welche Sie an »ShowMsg()« mittels »SADD(smAlert$)« übergeben
  273. '                müssen.
  274. '
  275. '                Diese Routine sollten Sie nur dann verwenden, wenn Sie für
  276. '                diesen Teilstring neue Einstellungen für Farben etc. machen
  277. '                wollen. Wenn dieser Teilstring jedoch mit den gleichen Ein-
  278. '                stellungen ausgegeben werden soll, wie der vorhergehende bzw.
  279. '                Sie die Default-Einstellungen verwenden wollen, dann müssen
  280. '                Sie stattdessen die Routine »SMTEXT()« verwenden.
  281. '
  282. '                Ein Beispiel für die Benutzung dieser Routine finden Sie in
  283. '                der Datei »demo/ShowMsgDemo.BAS«.
  284. '
  285. '   ACHTUNG:    Sie dürfen in Ihrem Programm keine eigene Stringvariable mit
  286. '   ¯¯¯¯¯¯¯¯    dem Namen »smAlert$« verwenden, da diese unweigerlich durch
  287. '                dieses Unterprogramm überschrieben werden würde. Außerdem
  288. '                dürfen Sie auch nicht »smlFlag%« benutzen, da über dieses
  289. '                wichtige Daten zwischen den beiden Routinen »SMTEXTP()« und
  290. '                »SMTEXT()« ausgetauscht werden !!
  291. '
  292. '                Außerdem müssen Sie den Parameterstring immer unmittelbar vor
  293. '                dem »ShowMsg()«-Aufruf definieren, da die Variable »smAlert$«
  294. '                jedesmal wieder überschrieben wird, und daher immer nur den
  295. '                zuletzt erstellten Parameterstring enthält.
  296. '
  297. ' Siehe auch:  »SMCOLOR()«, »SMTEXT()«, »ShowMsg()«
  298. '============================================================================
  299.  
  300. SUB SMTEXTP(xPos%,yPos%,MPen%,TLPen%,BRPen%,Style%,Mask%,Text$,EndFlag%) STATIC
  301. SHARED smAlert$,smlFlag%
  302.  
  303.     IF smlFlag%<>0 THEN        ' wird ein neuer ParamString angefangen,
  304.         smlFlag%=0            ' dann »smAlert$« erst zurücksetzen
  305.         smAlert$=""
  306.     ELSE
  307.         smlFlag%=EndFlag%
  308.     END IF
  309.  
  310.     IF xPos%=SMTPOS_C% THEN                ' gewünschte Ausrichtung,
  311.         xPos%=(640-(LEN(Text$)*8))/2    ' falls angegeben
  312.     ELSEIF xPos%=SMTPOS_L% THEN
  313.         xPos%=12
  314.     ELSEIF xPos%=SMTPOS_R% THEN
  315.         xPos%=(640-(LEN(Text$)*8))-12
  316.     END IF
  317.  
  318.     smAlert$=smAlert$+MKI$(xPos%)+CHR$(yPos%)+CHR$(1)+CHR$(MPen%)+CHR$(TLPen%)
  319.     smAlert$=smAlert$+CHR$(BRPen%)+CHR$(Style%)+CHR$(Mask%)+Text$+CHR$(0)
  320.  
  321.     IF EndFlag%=0 THEN                ' wenn kein END-Flag, dann Continue-Byte
  322.         smAlert$=smAlert$+CHR$(1)    ' setzen, ansonsten 0-Byte
  323.     ELSE
  324.         smAlert$=smAlert$+CHR$(0)
  325.     END IF
  326.  
  327. END SUB
  328.  
  329. '*** extra.library / SMTEXT() ***
  330. '============================================================================
  331. ' Diese Routine erstellt einen Teilstring des Parameterstrings der Funktion
  332. ' »ShowMsg()«. Wahlweise kann der Text automatisch zentriert, oder links- bzw.
  333. ' rechtsbündig ausgerichtet werden.
  334. '----------------------------------------------------------------------------
  335. ' Definiert:    extra.bc  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  336. '
  337. ' Schablone:    xPos%/A/N, yPos%/A/N, Text$/A, EndFlag%/K/S
  338. '
  339. ' Parameter:    xPos%     --> x-Position des Textes,
  340. '                                oder einer der oben definierten SMTPOS-Werte
  341. '
  342. '                yPos%     --> y-Position des Textes,
  343. '                                Ausrichtung an der Oberkante des Fonts
  344. '
  345. '                Text$     --> der Text selbst als Variable oder Konstante
  346. '
  347. '                EndFlag% --> - TRUE& , dann endet hier der Parameterstring
  348. '                             - FALSE&, dann MUSS noch ein weiterer Teilstring
  349. '                                       (SUB-Aufruf) folgen.
  350. '
  351. ' Bemerkung:    Nach Aufruf der Routine für alle einzelnen Teilstrings finden
  352. '                Sie den fertigen Parameterstring in der Variable »smAlert$«,
  353. '                welche Sie an »ShowMsg()« mittels »SADD(smAlert$)« übergeben
  354. '                müssen.
  355. '
  356. '                Dieses Macro sollten Sie nur dann verwenden, wenn Sie für
  357. '                diesen Teilstring die gleichen Einstellungen wie für den vor-
  358. '                hergehenden Teilstring verwenden wollen. Wenn dieser Teil-
  359. '                string jedoch neue Einstellungen für Farben etc. erhalten
  360. '                soll, dann müssen Sie stattdessen das Macro »SMTEXTP()« ver-
  361. '                wenden.
  362. '
  363. '                Ein Beispiel für die Benutzung dieser Routine finden Sie in
  364. '                der Datei »demo/ShowMsgDemo.BAS«.
  365. '
  366. '   ACHTUNG:    Sie dürfen in Ihrem Programm keine eigene Stringvariable mit
  367. '   ¯¯¯¯¯¯¯¯    dem Namen »smAlert$« verwenden, da diese unweigerlich durch
  368. '                dieses Unterprogramm überschrieben werden würde. Außerdem
  369. '                dürfen Sie auch nicht »smlFlag%« benutzen, da über dieses
  370. '                wichtige Daten zwischen den beiden Routinen »SMTEXTP()« und
  371. '                »SMTEXT()« ausgetauscht werden !!
  372. '
  373. '                Außerdem müssen Sie den Parameterstring immer unmittelbar vor
  374. '                dem »ShowMsg()«-Aufruf definieren, da die Variable »smAlert$«
  375. '                jedesmal wieder überschrieben wird, und daher immer nur den
  376. '                zuletzt erstellten Parameterstring enthält.
  377. '
  378. ' Siehe auch:  »SMCOLOR()«, »SMTEXTP()«, »ShowMsg()«
  379. '============================================================================
  380.  
  381. SUB SMTEXT(xPos%,yPos%,Text$,EndFlag%) STATIC
  382. SHARED smAlert$,smlFlag%
  383.  
  384.     IF smlFlag%<>0 THEN        ' wird ein neuer ParamString angefangen,
  385.         smlFlag%=0            ' dann »smAlert$« erst zurücksetzen
  386.         smAlert$=""
  387.     ELSE
  388.         smlFlag%=EndFlag%
  389.     END IF
  390.  
  391.     IF xPos%=SMTPOS_C% THEN                ' gewünschte Ausrichtung,
  392.         xPos%=(640-(LEN(Text$)*8))/2    ' falls angegeben
  393.     ELSEIF xPos%=SMTPOS_L% THEN
  394.         xPos%=12
  395.     ELSEIF xPos%=SMTPOS_R% THEN
  396.         xPos%=(640-(LEN(Text$)*8))-12
  397.     END IF
  398.  
  399.     smAlert$=smAlert$+MKI$(xPos%)+CHR$(yPos%)+CHR$(0)+Text$+CHR$(0)
  400.  
  401.     IF EndFlag%=0 THEN                ' wenn kein END-Flag, dann Continue-Byte
  402.         smAlert$=smAlert$+CHR$(1)    ' setzen, ansonsten 0-Byte
  403.     ELSE
  404.         smAlert$=smAlert$+CHR$(0)
  405.     END IF
  406.  
  407. END SUB
  408.  
  409. '*** extra.library / GETSTRING$() ***
  410. '============================================================================
  411. ' Diese Funktion liest einen MathString einer der ...ToString-Funktionen oder
  412. ' von »VSPrintF()« der extra.library ab Version 3.342 aus und weist ihn einem
  413. ' normalen BASIC-String zu.
  414. '----------------------------------------------------------------------------
  415. ' Definiert:    extra.bc  (Copyright © 1998-2004 RhoSigma, Roland Heyder)
  416. '
  417. ' Schablone:    MathStrAddr&/A/N
  418. '
  419. ' Parameter:    MathStrAddr& --> die Adresse eines gültigen MathStrings, wie
  420. '                                 sie von den ...ToString-Funktionen sowie von
  421. '                                 »VSPrintF()« der extra.library ab v3.342
  422. '                                 zurückgegeben wird
  423. '
  424. ' Bemerkung:    Ein Beispiel für die Benutzung dieser Routine finden Sie in
  425. '                der Datei »demo/StringDemo.BAS«.
  426. '============================================================================
  427.  
  428. FUNCTION GETSTRING$(MathStrAddr&) STATIC
  429. STATIC strLen&,strTmp$,x%
  430.  
  431.     strLen&=PEEKL(MathStrAddr&-4)
  432.     IF strLen&>0 THEN
  433.         strTmp$=""
  434.         FOR x%=0 TO strLen&-1
  435.             strTmp$=strTmp$+CHR$(PEEK(MathStrAddr&+x%))
  436.         NEXT x%
  437.         GETSTRING$=strTmp$
  438.     ELSE
  439.         GETSTRING$=""
  440.     END IF
  441.  
  442. END FUNCTION
  443.